草庐IT

c++ - C++ 中复杂的 Typedef

全部标签

c++ - 使用 typedef 别名作为参数重载成员方法

我在C++中重载方法时遇到了一些问题。typedefcharint8_t;classSomeClass{public:…voidMethod(int8_tparamater);voidMethod(charparamater);};因为int8_t是typedefaschar它们只是别名,它们可能引用相同的类型,在这种情况下重载将不起作用。我想让它们同时工作?你能提出相同的解决方案吗?注意:我不想添加模板化方法。错误如下:Error:MultipledeclarationforSomeClass::Method(char) 最佳答案

c++ - 如何为相同类型的 typedef 提供模板特化?

第3方SDK定义了几个typedef,例如:typedefunsignedcharSDK_BYTEtypedefdoubleSDK_DOUBLEtypedefunsignedcharSDK_BOOLEAN它还定义了一个变体类型SdkVariant:classSdkVariant{public:enumSdkType{SdkByte,SdkDouble,SdkBoolean};booltoByte(SDK_BYTE&);booltoDouble(SDK_DOUBLE&);booltoBool(SDK_BOOLEAN&);SdkTypetype();};从这样的变体中检索值看起来像这样(假

c++ - 在 C++ 中使用函数 typedef 定义函数

我正在Windows中实现一项服务。VisualStudio2012具有以下函数typedef:typedefVOIDWINAPISERVICE_MAIN_FUNCTIONW(DWORDdwNumServicesArgs,LPWSTR*lpServiceArgVectors);还有一个函数指针typedef:typedefVOID(WINAPI*LPSERVICE_MAIN_FUNCTIONW)(DWORDdwNumServicesArgs,LPWSTR*lpServiceArgVectors);如何使用typedef定义具有此函数签名的函数? 最佳答案

c++ - typedef 有效, 'using =' 无效

我有一段代码,稍微简化一下,相当于以下编译和工作正常的代码。templatestructfactory_function{typedeffunction(Args...)>type;};templateshared_ptrcreate_function(Args...args){returnmake_shared(args...);}templateintregister_factory(identifierid,typenamefactory_function::typefactory){}intmain(intargc,char*argv[]){register_factory(1

c++ - 如何转发声明我将使用 typedef 创建的类型?

例如,拿这段代码:classFoo;classSomething{Foo*thing;};typedefstd::vectorFoo;这不会编译,因为Foo当typedef时已经是一个类型被击中。但是,我认为它显示了我的用例;我有周期性依赖关系,需要一个来满足另一个,但(目前)其中一件事是typedef。我不想写类似的东西classFoo{std::vectorinside;}因为那时我需要记住inside在每个my_foo.inside.some_method().我还想避免围绕std::vector编写包装器,因为它会有很多样板文件。我如何转发声明我用typedef定义的类型?或者

c++ - 如何使用时间复杂度优于 O(n^2) 的 STL vector 和 STL 算法进行左连接?

我有2个vector,其中包含Person(名字、姓氏等)对象。我想取其中一个vector(我们将其命名为“大”),然后针对该vector中的每个元素在第二个vector(“小”)中找到相应的元素,并将一些数据从“小”vector元素合并到“大”vector元素。此操作与SQL术语中的左连接非常相似,但具有额外的数据合并。最简单的方法是进行2个循环,但这会导致O(n^2)时间复杂度。我可以使用STL算法做得更好吗? 最佳答案 如果你sort小vector,然后您可以通过扫描大vector并使用binary_search获得合并部分的

c++ - 指向类型不完整的 typedef 的指针

有什么方法可以声明一个指向不完整类型的指针,该类型将由实现中的typedef设置?这是我想要的例子:#ifndefTEST_H#defineTEST_Hnamespacestd{classstring;//THISWON'TWORK!}structTest{std::string*value;};#endifstring是basic_string的类型定义,因此示例中的代码将不起作用。我可以声明一个不完整类型的std::basic_string,但这看起来像是一种解决方法。我知道编译器不会为typedef生成符号,对于不同文件中的不同类型,可能会在typedef中使用相同的名称。但由于

c++ - 用同名的 typedef 替换预处理器宏

我想用同名的正确typedef替换宏。我有#defineFooTypechar*在第三方库中,这破坏了我的一些代码(更准确地说:一些我被迫使用的代码,我自己无法更改)。我想用同名的typedef替换它,然后用#undef宏替换它。我试过类似的东西:#defineTMP_MACROFooType#undefFooTypetypedefTMP_MACROFooType;#undefTMP_MACRO但是预处理器将其扩展为:typedefFooTypeFooType;(至少g++-E是这么告诉我的)。所以宏TMP_MACRO不会立即展开。由于“FooType”不存在,因此无法编译。如何用适当

c++ - 在实现文件中使用 typedef 来缩短类型签名的负面后果是什么?

我正在用C++做我的第一个真正的项目,它是一个简单的CSV解析器(目前处于非常早期的阶段),我在头文件中有以下内容:classCsvReader{public://ActionstocommitoneachiterationoftheCSVparserenumAction{ADD_CHAR,ADD_FIELD,NONE};//ThepossiblestatesforeachcellofaCSVenumState{START,IN_FIELD,IN_QUOTED_FIELD,IN_QUOTED_QUOTE};//CreatethereaderfromafileexplicitCsvRea

c++ - 转发声明 typedef 的结构

我不知道如何转发声明一个windows结构。定义是typedefstruct_CONTEXT{....}CONTEXT,*PCONTEXT我真的不想进入这个标题,因为它无处不在。我试过了结构语境和结构_CONTEXT运气不好(用winnt.h中的实际结构重新定义基本类型。 最佳答案 extern"C"{typedefstruct_CONTEXTCONTEXT,*PCONTEXT;}您需要声明_CONTEXT是一个struct。并将其声明为extern"C"以匹配windows.h的外部链接(这是一个C头文件)。但是,您不需要为typ